package com.gjt.http;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

/**
 * Created with Intel IDEA.
 * 配置客户端请求http首部（这个是客户端是发送给服务器的首部，不是前边的HeadrFiled）
 *
 *  一般urlConnection 首部会有名值对 ；在 打开链接之前 可以用setRequestProperty()方法添加首部字段
 *  注意：只有当连接是httpURL 才会有效
 *
 *  一般利用cookie 存储持久信息（cookie 其实是名值对）
 *
 * @Auther: gjt
 * @Date: 2024/4/7 1:49
 */
public class ClientConnectionHttpHead {

    /**
     * 向服务器写入数据(getOutputStream())
     */
    public static void write(URLConnection urlConnection){

        try{
            // 默认情况下urlConnection 不允许输出
            urlConnection.setDoOutput(true);

            OutputStream outputStream = urlConnection.getOutputStream();
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
            bufferedWriter.write("first=Jul&last=hh&work=String+Quarter\r\n");

            // 一定刷新
            bufferedWriter.flush();
            bufferedWriter.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }






    public static void main(String[] args) throws IOException {

        /**
         *  在http 首部添加一个cookie
         */
        // Cookie: userName= gjt; password = 12345; session = 111;
        // 键中不能包含空白符，值不能包含任何换行符
        URL url = new URL("http://www.gjt1314.xyz");
        URLConnection urlConnection = url.openConnection();


        urlConnection.setRequestProperty("Cookie","userName= gjt; password = 12345; session = 111");

        // 可以将同一个属性设置一个新值，会改变现在有的值 （ addRequestProperty()）
        urlConnection.addRequestProperty("userName","gjt1");

        // 获取http 首部
        String cookie = urlConnection.getRequestProperty("Cookie");
        Map<String, List<String>> requestProperties = urlConnection.getRequestProperties();
        System.out.println("http 首部 " + cookie);

        for (Map.Entry<String, List<String>> map : requestProperties.entrySet()) {
            System.out.println("key: "+ map.getKey()+"; value: "+ map.getValue());
        }


    }
}
